

 class ListNode {
     int val;
     ListNode next;
    ListNode() {}
    ListNode(int val) { this.val = val; }
     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 }

// 两两交换链表中的节点
//给你一个链表，两两交换其中相邻的节点，并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题（即，只能进行节点交换）
 //  1->2->3->4->5
 //定义一个虚拟头结点,假设为0,定义一个temp=虚拟头结点,定义两个快慢指针
 // 0->1->2->3->4->5   这段代码的逻辑就是让0指向2,1指向3,2指向1,temp指向1,如果 temp 的后面没有节点或者只有一个节点，则没有更多的节点需要交换，因此结束交换
class Solution {
    public ListNode swapPairs(ListNode head) {
       //定义一个虚拟头结点
        ListNode dummy=new ListNode(0);
        
        dummy.next=head;
        ListNode temp=dummy;
       
        while(temp.next!=null&&temp.next.next!=null){ //如果 temp 的后面没有节点或者只有一个节点，则没有更多的节点需要交换，因此结束交换
            ListNode end=temp.next;
            ListNode start=temp.next.next;
            temp.next=start;
            end.next=start.next;
            start.next=end;
            temp=end;


        }
        return dummy.next;

    }
}